/*
知识点：数据的验证器
	一、预定义验证器
		1、required: true ，表示必需字段
		2、max\min, 这是针对Number，可定义数字的最大值和最小值
		3、enum,match 这是针对String。enum是一个素组，表示字段只能是该数组
		   中的某一个值	。match则是一个正则表达式，表示字段内容，必须能满足
		   该正则表达式
	二、自定义验证器 validate，这是一个函数，然后返回一个布尔值，true表示验证
	    通过，false表示验证失败

	注意：这里所说的验证器的功能，是指在字段存入数据库前所做出的验证。如果验证成功
		  才能顺利存入数据库，失败则无法存入数据库。
*/
const mongoose = require('mongoose');
const uri = 'mongodb://localhost/htl';
const db = mongoose.connect(uri);

const TestSchema = new mongoose.Schema({
	name: {
		type: String,
		required: true,   //表示name字段是必须字段
		enum: ['htl','tt','gc','cc'], //表示name字段的值，必须是在该数组中的某一个
	},
	age: {
		type: Number,
		max: 150,  //age字段最大不能超过150
		min: 0   //age字段最小不能小于0
	},
	like: {
		type: String,
		match: /ball/ig,  //表示like字段中必须包含有'ball'
		validate: function(val) {  //自定义验证器，表示like字段长度必须超过6个，
			return val.length > 6; //才能验证成功
		}
	}
})

const Test = mongoose.model('cc',TestSchema,'cc');
const test = new Test({
	name: 'htl',
	age: 20,
	like: 'ball123'
});
test.save((err) => {
	if(err) return console.log('save err:' + err);
});
Test.find({},function(err,doc) {
	if(err) return console.log('find err:' + err);
	console.log(doc);
})